package com.youdianstar.app.ui

import androidx.databinding.ObservableField
import androidx.lifecycle.viewModelScope
import androidx.paging.PagingData
import androidx.paging.cachedIn
import com.youdianstar.app.entity.BranchInfo
import com.youdianstar.app.support.ApiRepository
import com.youdianstar.app.common.base.BaseViewModel
import com.youdianstar.app.common.event.NetEventLiveData
import com.youdianstar.app.common.event.NetStateLiveData
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.launch


/**
 * File: BranchViewModel
 * Author: 82149 Create: 2021/9/28 19:22
 * Changes (from 2021/9/28)
 * --------------------------------------------------
 * description: 网点
 * ---------------------------------------------------
 *
 */
class BranchViewModel (private val repo: ApiRepository) : BaseViewModel() {

    // 使用用户真实位置（从DataAppManager获取）
    private fun getLocalLatLng(): Pair<Double, Double> {
        val latLng = com.youdianstar.app.util.DataAppManager.instance.getLocalLatLng()
        return Pair(latLng.latitude, latLng.longitude)
    }
    
    val localLat: Double
        get() = getLocalLatLng().first
        
    val localLng: Double
        get() = getLocalLatLng().second

    val listEventLiveData = NetEventLiveData()
    /**
     * 请求列表数据
     * Lat 维度 Lng 经度
     *
     * @param search 搜索密钥
     * @param dataType 网点类型：null-全部 1-可租借 2-可归还
     * @param lat 可选的纬度，如果为null则使用用户当前位置
     * @param lng 可选的经度，如果为null则使用用户当前位置
     */
    fun getBranchListData(search:String,dataType: Int?, lat: Double? = null, lng: Double? = null): Flow<PagingData<BranchInfo>> {
        val finalLat = lat ?: localLat
        val finalLng = lng ?: localLng
        return repo.getBranchListData(finalLng, finalLat, search, dataType, listEventLiveData).cachedIn(viewModelScope)
    }

    //-------------------------网点详情-----------------------------------------

    val branchDetailFiled = ObservableField<BranchInfo>()
    val detailLiveData = NetStateLiveData<BranchInfo>()

    /**
     * 获取网点详情
     * @param id 网点id
     * @param distance 距离（公里）
     */
    fun getBranchDetails(id: Int, distance: Double = 0.0){
        viewModelScope.launch(Dispatchers.IO) {
            repo.getBranchDetail(id.toString(), localLat, localLng, distance, detailLiveData)
        }
    }

}